package com.ssm.controller;

import com.ssm.entity.User;
import com.ssm.entity.Role;
import com.ssm.service.IUserService;
import com.ssm.util.JwtUtil;
import com.ssm.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
 * 认证控制器
 * 【SpringMVC: RESTful API】
 * 实现RESTful风格的认证API
 */
@RestController
@RequestMapping("/api/auth")
public class AuthController {

    @Autowired
    private IUserService userService;

    @Autowired
    private JwtUtil jwtUtil;

    /**
     * 登录
     * @param loginMap 登录参数
     * @return 登录结果
     */
    @PostMapping("/login")
    public Result<Map<String, Object>> login(@RequestBody Map<String, String> loginMap) {
        String username = loginMap.get("username");
        String password = loginMap.get("password");
        
        // 参数校验
        if (username == null || "".equals(username) || password == null || "".equals(password)) {
            return Result.error("用户名或密码不能为空");
        }
        
        // 查询用户
        User user = userService.findByUsername(username);
        if (user == null) {
            return Result.error("用户不存在");
        }
        
        // 验证密码
        if (!password.equals(user.getPasswd())) {
            return Result.error("密码错误");
        }
        
        // 生成JWT令牌
        String token = jwtUtil.generateToken(user.getUid(), user.getUname(), userService.findRoleNameById(user.getRole().getRid()));
        
        // 更新最后登录时间
        userService.updateLastLoginTime(user.getUid());
        
        // 返回结果
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("token", token);
        resultMap.put("user", user);
        
        return Result.success("登录成功", resultMap);
    }

    /**
     * 注册
     * @param user 用户信息
     * @return 注册结果
     */
    @PostMapping("/register")
    public Result<User> register(@RequestBody User user) {
        // 参数校验
        if (user.getUname() == null || "".equals(user.getUname()) || 
            user.getPasswd() == null || "".equals(user.getPasswd())) {
            return Result.error("用户名或密码不能为空");
        }
        
        // 检查用户名是否已存在
        User existUser = userService.findByUsername(user.getUname());
        if (existUser != null) {
            return Result.error("用户名已存在");
        }
        
        // 设置默认角色为普通用户
        if (user.getRole() == null) {
            Role role = new Role();
            role.setRid(2); // 2为普通用户角色ID
            user.setRole(role);
        } else {
            user.getRole().setRid(2); // 强制设置为普通用户角色
        }
        
        // 设置用户状态为正常
        user.setStatus(1);
        
        // 保存用户
        User savedUser = userService.save(user);
        if (savedUser == null) {
            return Result.error("注册失败，可能用户名已存在");
        }
        
        // 清除密码等敏感信息
        savedUser.setPasswd(null);
        
        return Result.success("注册成功", savedUser);
    }
} 